import datetime
import os

from django.contrib.auth.models import AbstractUser
from django.db import models
from DjangoUeditor.models import UEditorField
# Create your models here.
from django.utils.timezone import now


class User(AbstractUser):
    """
    自定义用户模型类
    """
    # 自定义一个用户模型类,unique 不允许重复
    mobile = models.CharField(max_length=11, verbose_name='手机', unique=True)
    email_active = models.BooleanField(default=False, verbose_name='邮箱验证状态')

    class Meta:
        db_table = 'tb_table'
        verbose_name = '用户'
        verbose_name_plural = verbose_name
        ordering = ['id']

    def __str__(self):
        return self.username


def user_directory_path(instance, filename):
    fname, ext = filename.split('.')
    date = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
    filename = '{0}{1}.{2}'.format(fname, date, ext)
    filename = 'images/'+ filename
    return filename # 系统路径分隔符差异，增强代码重用性


class BlogContent(models.Model):
    """
    用于展示博客的内容
    """
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户',related_name='blog')
    title = models.CharField('标题', max_length=36)
    content = UEditorField(toolbars="full", imagePath="images/", filePath="files/",upload_settings={"imageMaxSize":1204000},settings={}, verbose_name='内容',default='')
    is_enable = models.BooleanField('是否显示',default=False)
    read = models.IntegerField('阅读量', default=0)
    comment = models.IntegerField('评论量', default=0)
    # 1 upload_to 参数接收一个回调函数 user_directory_path，该函数返回具体的路径字符串，图片会自动上传到指定路径下，
    # 即 MEDIA_ROOT + upload_to
    # 2 user_directory_path 函数必须接收 instace 和 filename 两个参数。
    # 参数 instace 代表一个定义了 ImageField 的模型的实例，说白了就是当前数据记录；filename 是原本的文件名
    # 3 null 是针对数据库而言，如果 null = True, 表示数据库的该字段可以为空；
    # blank 是针对表单的，如果 blank = True，表示你的表单填写该字段的时候可以不填，但是对数据库来说，没有任何影响
    picture = models.ImageField('图片', upload_to=user_directory_path, null=True, blank=True)
    referral = models.CharField(max_length=156,null=True)
    creat_time = models.DateTimeField('创建时间', default=now, null=True)
    last_time = models.DateTimeField('最后修改时间', default=now, null=True)

    class Meta:
        db_table = 'tb_content'
        verbose_name = '文章详情'
        verbose_name_plural = verbose_name

